-- 1.在学生信息表中，查询学生的信息，显示的字段为：学号,姓名,性别,出生日期,年龄，要求如下：
-- 年龄要求必须满周岁
-- 蒙覃当
select * from 学生信息

select 学号,姓名,性别,出生日期,
	convert(int,datediff(day,出生日期,getdate())/365.22) 
	as 年龄
from 学生信息

select 学号,姓名,性别,出生日期,
	YEAR(getdate()) - YEAR(出生日期) - 
	case
		when MONTH(出生日期)>MONTH(getdate()) or MONTH(出生日期)=MONTH(getdate()) and DAY(出生日期)> DAY(getdate())  then 1
		else 0 
	end
	as 年龄
from 学生信息



-- 2.在学生信息表中，统计陈姓的数量，显示格式为：姓,数量
select '陈' as 姓,
count(*) as 数量 from 学生信息
where left(姓名,1)='陈'



-- 3.在成绩表中，查询各课程的平均分，显示格式为：课程编号,平均分
-- 平均分要求保留一位小数

select 课程编号,round(avg(convert(float,分数)),1) as 平均分 
from 成绩信息
group by 课程编号 
order by 课程编号*1


-- 4.查询姓李且名字只有一个字的学生信息，如李三
select * from 学生信息 where rtrim(姓名) like '李_'


-- 5.自定义函数，实现判断某年是润年或平年
GO
create function deteYear(@year as int)
returns varchar(20)
begin
	declare @result varchar(20)
	
	if @year % 4 = 0 and @year % 100 != 0 or @year % 400 =0
		begin
			set @result = '闰年'
		end
	else
		begin
			set @result = '平年'
		end
	return convert(varchar,@year) + '年是' + @result
end
GO


print dbo.deteYear(2023)


-- 6.自定义函数，实现对学生信息表实现分页查询
GO
create function findStudentByPager(@currentPage as int,@pageSize as int) 
returns table
return 
	select * from 
	(
		select *,
		row_number() over(order by 学号 asc) as rownumber 
		from 学生信息
	) as t
	where t.rownumber between (@currentPage - 1) * @pageSize + 1 and @currentPage * @pageSize
GO


select * from dbo.findStudentByPager(2,12) ;


